home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / pdraw.zip / PDRAW.UIL < prev    next >
Text File  |  1992-07-23  |  79KB  |  2,715 lines

  1. !        "%W% Stardent %E%"
  2. !
  3. !            Copyright (c) 1991 by
  4. !            Stardent Computer Inc.
  5. !            All Rights Reserved
  6. !
  7. ! Permission to use, copy, modify, and distribute this software and its
  8. ! documentation for any purpose and without fee is hereby granted,
  9. ! provided that the above copyright notice appear in all copies and that
  10. ! both that copyright notice and this permission notice appear in
  11. ! supporting documentation, and that the name of Stardent Computer not be
  12. ! used in advertising or publicity pertaining to distribution of the
  13. ! software without specific, written prior permission. Stardent Computer
  14. ! makes no representations about the suitability of this software for any
  15. ! purpose.  It is provided "as is" without express or implied warranty.
  16. !
  17. module pdraw
  18.     version = 'v1.0'
  19.     names = case_sensitive
  20.  
  21. procedure
  22.     proc_pdraw_exit();
  23.     proc_pdraw_create(integer);    
  24.     proc_pdraw_expose();    
  25.     proc_pdraw_resize();    
  26.     proc_pdraw_input();    
  27.     proc_pdraw_activate(integer);
  28.     proc_pdraw_file();
  29.     proc_pdraw_surface();
  30.     
  31. value
  32.     k_drawing_area      :  0;
  33.     k_view_set         :  1;
  34.     k_apply_vs         :  2;
  35.     k_reset_vs         :  3;
  36.     k_dismiss_vs       :  4;
  37.     k_view_ref_pt_x    :  5;
  38.     k_view_ref_pt_y    :  6;
  39.     k_view_ref_pt_z    :  7;
  40.     k_view_pl_norm_x    :  8;
  41.     k_view_pl_norm_y    :  9;
  42.     k_view_pl_norm_z    : 10;
  43.     k_view_up_vect_x    : 11;
  44.     k_view_up_vect_y    : 12;
  45.     k_view_up_vect_z    : 13;
  46.     k_proj_ref_pt_x     : 14;
  47.     k_proj_ref_pt_y     : 15;
  48.     k_proj_ref_pt_z     : 16;
  49.     k_view_window_minx  : 17;
  50.     k_view_window_maxx  : 18;
  51.     k_view_window_miny  : 19;
  52.     k_view_window_maxy  : 20;
  53.     k_view_plane_dist   : 21;
  54.     k_view_plane_back   : 22;
  55.     k_view_plane_front  : 23;
  56.     k_proj_vp_minx      : 24;
  57.     k_proj_vp_maxx      : 25;
  58.     k_proj_vp_miny      : 26;
  59.     k_proj_vp_maxy      : 27;
  60.     k_proj_vp_minz      : 28;
  61.     k_proj_vp_maxz      : 29;
  62.     k_proj_type_para    : 30;
  63.     k_proj_type_persp   : 31;
  64.     k_dump_strux        : 32;
  65.     k_refresh           : 33;
  66.     k_tool_pointer      : 34;
  67.     k_tool_line         : 35;
  68.     k_tool_view         : 36;
  69.     k_tool_tristrip     : 37;
  70.     k_delete            : 38;
  71.     k_light        : 39;
  72.     k_light_on1        : 40;
  73.     k_light_on2        : 41;
  74.     k_light_on3        : 42;
  75.     k_light_on4        : 43;
  76.     k_light_on5        : 44;
  77.     k_light_on6        : 45;
  78.     k_light_on7        : 46;
  79.     k_light_on8        : 47;
  80.     k_light_edit1        : 48;
  81.     k_light_edit2        : 49;
  82.     k_light_edit3        : 50;
  83.     k_light_edit4        : 51;
  84.     k_light_edit5        : 52;
  85.     k_light_edit6        : 53;
  86.     k_light_edit7        : 54;
  87.     k_light_edit8        : 55;
  88.     k_light_type_ambient    : 56;
  89.     k_light_type_directional    : 57;
  90.     k_light_type_positional    : 58;
  91.     k_light_type_spot        : 59;
  92.     k_light_pos_x        : 60;
  93.     k_light_pos_y        : 61;
  94.     k_light_pos_z        : 62;
  95.     k_light_color_red        : 63;
  96.     k_light_color_green        : 64;
  97.     k_light_color_blue        : 65;
  98.     k_light_direction_x        : 66;
  99.     k_light_direction_y        : 67;
  100.     k_light_direction_z        : 68;
  101.     k_light_coeff_const        : 69;
  102.     k_light_coeff_dist        : 70;
  103.     k_light_conc_exp        : 71;
  104.     k_light_spread_angle    : 72;
  105.     k_apply_light        : 73;
  106.     k_reset_light        : 74;
  107.     k_dismiss_light        : 75;
  108.     k_surface            : 76;
  109.     k_FREE            : 77;
  110.     k_spin_strux                : 78;
  111.     k_spin_slowly               : 79;
  112.     k_save                      : 80;
  113.     k_read                      : 81;
  114.     k_file                      : 82;
  115.     k_undo                      : 83;
  116.     k_file_help                 : 84;
  117.     k_delete_all                : 85;
  118.     k_face_cull                 : 86;
  119.     k_sphere                    : 87;
  120.     k_dismiss_surface : 88;
  121.     k_reset_surface : 89;
  122.     k_apply_surface : 90;
  123.     k_surface_refl_transparency : 91;
  124.     k_surface_refl_specexp : 92;
  125.     k_surface_refl_specular : 93;
  126.     k_surface_refl_diffuse : 94;
  127.     k_surface_refl_ambient : 95;
  128.     k_sstyle_empty : 96;
  129.     k_sstyle_solid : 97;
  130.     k_sstyle_hollow : 98;
  131.     k_sshade_flat : 99;
  132.     k_sshade_gouraud : 100;
  133.     k_sshade_dot : 101;
  134.     k_sshade_phong : 102;
  135.     k_cull_none : 103;
  136.     k_cull_back : 104;
  137.     k_cull_front : 105;
  138.  
  139. value
  140.         yellow                          : color('yellow', foreground);
  141.         red                             : color('red', background);
  142.         green                           : color('green', foreground);
  143.         magenta                         : color('magenta', background);
  144.         gold                            : color('gold', foreground);
  145.         lightblue                       : color('lightblue', background);
  146.  
  147. !************************************************************************
  148. ! Main Window
  149. !************************************************************************
  150.  
  151. object
  152.     pdraw_obj_main : XmMainWindow {
  153.        controls {
  154.             XmMenuBar     pdraw_obj_bar ;
  155.             XmForm        pdraw_obj_form ;
  156.        };
  157.     };
  158.  
  159. object
  160.     pdraw_obj_form : XmForm {
  161.     arguments { 
  162.         XmNdefaultButton = pdraw_tool_line;
  163.     };
  164.     controls {
  165.         XmRowColumn        pdraw_tool_palette;
  166.         XmSeparator        pdraw_obj_sep;
  167.         XmDrawingArea        pdraw_pex_area;
  168.     };
  169.     };
  170.  
  171. !************************************************************************
  172. ! the top menu bar
  173. !************************************************************************
  174.  
  175. object
  176.     pdraw_obj_bar : XmMenuBar {
  177.         arguments { 
  178.             XmNorientation = XmHORIZONTAL;
  179.         };
  180.         controls {                              
  181.             XmCascadeButton file_menu_entry;
  182.             XmCascadeButton edit_menu_entry;
  183.             XmCascadeButton misc_menu_entry;
  184.         };
  185.     };
  186.  
  187. object
  188.         file_menu_entry : XmCascadeButton {
  189.             arguments {
  190.                 XmNlabelString = compound_string('File') ;
  191.         XmNmnemonic = keysym("F");
  192.             };                                            
  193.             controls {
  194.                 XmPulldownMenu file_menu;
  195.             };
  196.         };
  197.  
  198. object
  199.         file_menu : XmPulldownMenu {
  200.             controls {
  201.                 XmPushButton pdraw_obj_read;
  202.                 XmPushButton pdraw_obj_save;
  203.                 XmPushButton pdraw_obj_quit;
  204.             };
  205.         };
  206.  
  207. object
  208.     pdraw_obj_quit : XmPushButton {
  209.     arguments { 
  210.         XmNlabelString = compound_string('Quit');
  211.         XmNaccelerator = "Ctrl<Key>z:";
  212.         XmNacceleratorText = "Ctrl/z";
  213.          XmNmnemonic = keysym("Q");
  214.     };
  215.     callbacks { 
  216.         XmNactivateCallback = procedure proc_pdraw_exit();
  217.     };
  218.     };
  219.  
  220. object
  221.     pdraw_obj_read : XmPushButton {
  222.     arguments { 
  223.         XmNlabelString = compound_string('Read');
  224.          XmNmnemonic = keysym("R");
  225.     };
  226.     callbacks { 
  227.         XmNactivateCallback = procedure proc_pdraw_activate(k_read);
  228.     };
  229.     };
  230.  
  231. object
  232.     pdraw_obj_save : XmPushButton {
  233.     arguments { 
  234.         XmNlabelString = compound_string('Save');
  235.          XmNmnemonic = keysym("S");
  236.     };
  237.     callbacks { 
  238.         XmNactivateCallback = procedure proc_pdraw_activate(k_save);
  239.     };
  240.     };
  241.  
  242. !************************************************************************
  243. ! Edit Menu
  244. !************************************************************************
  245.  
  246. object
  247.         edit_menu_entry : XmCascadeButton {
  248.             arguments {
  249.                 XmNlabelString = compound_string('Edit') ;
  250.         XmNmnemonic = keysym("E");
  251.             };                                            
  252.             controls {
  253.                 XmPulldownMenu edit_menu;
  254.             };
  255.         };
  256.  
  257. object
  258.         edit_menu : XmPulldownMenu {
  259.             controls {
  260.                 XmPushButton pdraw_edit_undo;
  261.                 XmPushButton pdraw_edit_delete;
  262.                 XmPushButton pdraw_edit_delete_all;
  263.             };
  264.         };
  265.  
  266. object
  267.     pdraw_edit_delete : XmPushButton {
  268.     arguments { 
  269.         XmNlabelString = compound_string('Delete');
  270.         XmNmnemonic = keysym("D");
  271.         XmNaccelerator = "Ctrl<Key>d:";
  272.         XmNacceleratorText = "Ctrl/d";
  273.     };
  274.     callbacks { 
  275.         XmNactivateCallback = procedure proc_pdraw_activate(k_delete);
  276.     };
  277.     };
  278.  
  279. object
  280.     pdraw_edit_undo : XmPushButton {
  281.     arguments { 
  282.         XmNlabelString = compound_string('Undo');
  283.         XmNmnemonic = keysym("U");
  284.     };
  285.     callbacks { 
  286.         XmNactivateCallback = procedure proc_pdraw_activate(k_undo);
  287.     };
  288.     };
  289.  
  290. object
  291.     pdraw_edit_delete_all : XmPushButton {
  292.     arguments { 
  293.         XmNlabelString = compound_string('Delete All');
  294.         XmNmnemonic = keysym("A");
  295.     };
  296.     callbacks { 
  297.         XmNactivateCallback = procedure proc_pdraw_activate(k_delete_all);
  298.     };
  299.     };
  300.  
  301.  
  302. !************************************************************************
  303. ! miscellaneous menu
  304. !************************************************************************
  305. object
  306.         misc_menu_entry : XmCascadeButton {
  307.             arguments {
  308.                 XmNlabelString = compound_string('Options') ;
  309.         XmNmnemonic = keysym("O");
  310.             };                                            
  311.             controls {
  312.                 XmPulldownMenu misc_menu;
  313.             };
  314.         };
  315.  
  316. object
  317.         misc_menu : XmPulldownMenu {
  318.             controls {
  319.                 XmPushButton pdraw_misc_view_set;
  320.                 XmPushButton pdraw_misc_light;
  321.                 XmPushButton pdraw_misc_dump_strux;
  322.                 XmPushButton pdraw_misc_refresh;
  323.                 XmPushButton pdraw_misc_surface;
  324.                 XmPushButton pdraw_misc_spin_strux;
  325.                 XmPushButton pdraw_misc_spin_slowly;
  326.                 XmPushButton pdraw_misc_sphere;
  327.             };
  328.         };
  329.  
  330. object
  331.     pdraw_misc_view_set : XmPushButton {
  332.     arguments { 
  333.         XmNlabelString = compound_string('Set View');
  334.           XmNmnemonic = keysym("V");
  335.     };
  336.     callbacks { 
  337.         XmNactivateCallback = procedure proc_pdraw_activate(k_view_set);
  338.     };
  339.     };
  340.  
  341. object
  342.     pdraw_misc_light : XmPushButton {
  343.     arguments { 
  344.         XmNlabelString = compound_string('Light');
  345.         XmNmnemonic = keysym("L");
  346.     };
  347.     callbacks { 
  348.         XmNactivateCallback = procedure proc_pdraw_activate(k_light);
  349.     };
  350.     };
  351.  
  352.  
  353. object
  354.     pdraw_misc_dump_strux : XmPushButton {
  355.     arguments { 
  356.         XmNlabelString = compound_string('Dump Strux');
  357.         XmNmnemonic = keysym("D");
  358.     };
  359.     callbacks { 
  360.         XmNactivateCallback = procedure proc_pdraw_activate(k_dump_strux);
  361.     };
  362.     };
  363.  
  364. object
  365.     pdraw_misc_refresh : XmPushButton {
  366.     arguments { 
  367.         XmNlabelString = compound_string('Refresh');
  368.         XmNmnemonic = keysym("R");
  369.     };
  370.     callbacks { 
  371.         XmNactivateCallback = procedure proc_pdraw_activate(k_refresh);
  372.     };
  373.     };
  374. object
  375.     pdraw_misc_surface : XmPushButton {
  376.     arguments { 
  377.         XmNlabelString = compound_string('Surface Attr');
  378.         XmNmnemonic = keysym("S");
  379.     };
  380.     callbacks { 
  381.         XmNactivateCallback = procedure proc_pdraw_activate(k_surface);
  382.     };
  383.     };
  384.  
  385.  
  386. object
  387.     pdraw_misc_spin_strux : XmPushButton {
  388.     arguments { 
  389.         XmNlabelString = compound_string('Spin');
  390.         XmNmnemonic = keysym("n");
  391.     };
  392.     callbacks { 
  393.         XmNactivateCallback = procedure proc_pdraw_activate(k_spin_strux);
  394.     };
  395.     };
  396.  
  397. object
  398.     pdraw_misc_spin_slowly : XmPushButton {
  399.     arguments { 
  400.         XmNlabelString = compound_string('Spin Slow');
  401.         XmNmnemonic = keysym("w");
  402.     };
  403.     callbacks { 
  404.         XmNactivateCallback = procedure proc_pdraw_activate(k_spin_slowly);
  405.     };
  406.     };
  407.  
  408. object
  409.     pdraw_misc_sphere : XmPushButton {
  410.     arguments { 
  411.         XmNlabelString = compound_string('Sphere');
  412.         XmNmnemonic = keysym("h");
  413.     };
  414.     callbacks { 
  415.         XmNactivateCallback = procedure proc_pdraw_activate(k_sphere);
  416.     };
  417.     };
  418.  
  419. !************************************************************************
  420. ! tool palette RowColumn
  421. !************************************************************************
  422.  
  423. value
  424.         button_ct                       : color_table(
  425.                                                 yellow='o'
  426.                                                 ,red='.'
  427.                                                 ,background color=' ');
  428.  
  429. value
  430.         pointer_icon: icon(color_table=button_ct,
  431.                         '                        ',
  432.                         ' ...................... ',
  433.                         ' .....o................ ',
  434.                         ' .....oo............... ',
  435.                         ' .....ooo.............. ',
  436.                         ' .....oooo............. ',
  437.                         ' .....oo.oo............ ',
  438.                         ' .....oo..oo........... ',
  439.                         ' .....oo...oo.......... ',
  440.                         ' .....oo....oo......... ',
  441.                         ' .....oo.....oo........ ',
  442.                         ' .....oo......oo....... ',
  443.                         ' .....ooooooooooo...... ',
  444.                         ' .....oooooooooooo..... ',
  445.                         ' ..........ooo......... ',
  446.                         ' ...........ooo........ ',
  447.                         ' ...........oooo....... ',
  448.                         ' ............oooo...... ',
  449.                         ' ...................... ',
  450.                         '                        ');
  451.  
  452. value
  453.         line_icon: icon(color_table=button_ct,
  454.                         '                        ',
  455.                         ' ...................... ',
  456.                         ' .................oo... ',
  457.                         ' ................ooo... ',
  458.                         ' ...............ooo.... ',
  459.                         ' ..............ooo..... ',
  460.                         ' .............ooo...... ',
  461.                         ' ............ooo....... ',
  462.                         ' ...........ooo........ ',
  463.                         ' ..........ooo......... ',
  464.                         ' .........ooo.......... ',
  465.                         ' ........ooo........... ',
  466.                         ' .......ooo............ ',
  467.                         ' ......ooo............. ',
  468.                         ' .....ooo.............. ',
  469.                         ' ....ooo............... ',
  470.                         ' ...ooo................ ',
  471.                         ' ...oo................. ',
  472.                         ' ...................... ',
  473.                         '                        ');
  474.  
  475. value
  476.         view_icon: icon(color_table=button_ct,
  477.                         '                        ',
  478.                         ' ...................... ',
  479.                         ' ...................... ',
  480.                         ' ...................... ',
  481.                         ' ...................... ',
  482.                         ' ......oooooooooo...... ',
  483.                         ' ....o....oooo....o.... ',
  484.                         ' ..o.....oooooo.....o.. ',
  485.                         ' .o.....oooooooo.....o. ',
  486.                         ' .o.....oooooooo.....o. ',
  487.                         ' .o.....oooooooo.....o. ',
  488.                         ' ..o.....oooooo.....o.. ',
  489.                         ' ....o....oooo....o.... ',
  490.                         ' ......oooooooooo...... ',
  491.                         ' ...................... ',
  492.                         ' ...................... ',
  493.                         ' ...................... ',
  494.                         ' ...................... ',
  495.                         ' ...................... ',
  496.                         '                        ');
  497.  
  498. value
  499.         tristrip_icon: icon(color_table=button_ct,
  500.                         '                        ',
  501.                         ' ...................... ',
  502.                         ' ..................oo.. ',
  503.                         ' ................oooo.. ',
  504.                         ' ..............oo..oo.. ',
  505.                         ' ............oo....oo.. ',
  506.                         ' ..........oo......oo.. ',
  507.                         ' ........oo........oo.. ',
  508.                         ' ......oo..........oo.. ',
  509.                         ' ....oo........oooooo.. ',
  510.                         ' ..oo....oooooo....oo.. ',
  511.                         ' ..oooooo........oo.... ',
  512.                         ' ..oo..........oo...... ',
  513.                         ' ..oo........oo........ ',
  514.                         ' ..oo......oo.......... ',
  515.                         ' ..oo....oo............ ',
  516.                         ' ..oo..oo.............. ',
  517.                         ' ..oooo................ ',
  518.                         ' ..oo.................. ',
  519.                         '                        ');
  520.  
  521. object 
  522.     pdraw_tool_palette : XmRowColumn {
  523.         arguments {
  524.             XmNorientation = XmVERTICAL;
  525.         XmNleftAttachment =  XmATTACH_FORM;
  526.         XmNbottomAttachment =  XmATTACH_FORM;
  527.         XmNtopAttachment =  XmATTACH_FORM;
  528.             XmNborderWidth = 2;
  529.             };
  530.         controls {                                                  
  531.         XmPushButton    pdraw_tool_pointer;
  532.         XmPushButton    pdraw_tool_line;
  533.         XmPushButton    pdraw_tool_view;
  534.         XmPushButton    pdraw_tool_tristrip;
  535.             };
  536.         };
  537.  
  538.  
  539. object
  540.     pdraw_tool_pointer : XmPushButton {
  541.     arguments { 
  542.             XmNlabelType = XmPIXMAP;
  543.             XmNlabelPixmap = pointer_icon;
  544.     };
  545.     callbacks { 
  546.        XmNactivateCallback = procedure proc_pdraw_activate(k_tool_pointer);
  547.     };
  548.     };
  549.  
  550. object
  551.     pdraw_tool_line : XmPushButton {
  552.     arguments { 
  553.             XmNlabelType = XmPIXMAP;
  554.             XmNlabelPixmap = line_icon;
  555.     };
  556.     callbacks { 
  557.         XmNactivateCallback = procedure proc_pdraw_activate(k_tool_line);
  558.     };
  559.     };
  560.  
  561. object
  562.     pdraw_tool_view : XmPushButton {
  563.     arguments { 
  564.             XmNlabelType = XmPIXMAP;
  565.             XmNlabelPixmap = view_icon;
  566.     };
  567.     callbacks { 
  568.         XmNactivateCallback = procedure proc_pdraw_activate(k_tool_view);
  569.     };
  570.     };
  571.  
  572. object
  573.     pdraw_tool_tristrip : XmPushButton {
  574.     arguments { 
  575.             XmNlabelType = XmPIXMAP;
  576.             XmNlabelPixmap = tristrip_icon;
  577.     };
  578.     callbacks { 
  579.         XmNactivateCallback = procedure proc_pdraw_activate(k_tool_tristrip);
  580.     };
  581.     };
  582.  
  583.  
  584. !************************************************************************
  585. ! how do I get this attached to the right most box???
  586. !************************************************************************
  587. object
  588.     pdraw_obj_sep : XmSeparator {
  589.     arguments {
  590.         XmNbottomAttachment = XmATTACH_FORM ;
  591.         XmNtopAttachment = XmATTACH_FORM ;
  592.         XmNleftAttachment = XmATTACH_WIDGET ;
  593.         XmNleftWidget = pdraw_tool_palette ;
  594.     };
  595.     };
  596.  
  597.  
  598. !************************************************************************
  599. ! The PHIGS Workstation drawing Area
  600. !************************************************************************
  601.  
  602.  
  603. object
  604.     pdraw_pex_area : XmDrawingArea {
  605.     arguments { 
  606.         XmNrightAttachment = XmATTACH_FORM ;
  607.         XmNtopAttachment = XmATTACH_FORM ;
  608.         XmNbottomAttachment = XmATTACH_FORM ;
  609.         XmNleftAttachment = XmATTACH_WIDGET ;
  610.         XmNleftWidget = XmSeparator pdraw_obj_sep ;
  611.         XmNwidth = 500 ;
  612.         XmNheight = 500 ;
  613.     };
  614.     callbacks {
  615.         MrmNcreateCallback = procedure proc_pdraw_create(0);
  616.         XmNresizeCallback = procedure proc_pdraw_resize();
  617.         XmNexposeCallback = procedure proc_pdraw_expose();
  618.         XmNinputCallback = procedure proc_pdraw_input();
  619.     };
  620.     };
  621.  
  622. !************************************************************************
  623. ! The Set View Form
  624. !************************************************************************
  625.  
  626. object
  627.     view_set_dialog : XmFormDialog {
  628.         arguments {
  629.             XmNdialogTitle = "PHIGS Viewing Options";
  630.             XmNdialogStyle = XmDIALOG_MODELESS;
  631.         XmNheight = 400;
  632.         XmNwidth = 360;
  633. !        XmNmwmDecorations = 30;
  634.             XmNbackground = lightblue;
  635.         };
  636.         controls {
  637.             XmLabel     view_ref_pt_label;
  638.             XmTextField view_ref_pt_x;
  639.             XmTextField view_ref_pt_y;
  640.             XmTextField view_ref_pt_z;
  641.         XmSeparator view_pl_norm_sep;
  642.             XmLabel     view_pl_norm_label;
  643.             XmTextField view_pl_norm_x;
  644.             XmTextField view_pl_norm_y;
  645.             XmTextField view_pl_norm_z;
  646.         XmSeparator view_up_vect_sep;
  647.             XmLabel     view_up_vect_label;
  648.             XmTextField view_up_vect_x;
  649.             XmTextField view_up_vect_y;
  650.             XmTextField view_up_vect_z;
  651.         XmSeparator  proj_ref_pt_sep;
  652.         XmLabel  proj_ref_pt_label;
  653.         XmTextField  proj_ref_pt_x;
  654.         XmTextField  proj_ref_pt_y;
  655.         XmTextField  proj_ref_pt_z;
  656.         XmSeparator  view_window_sep;
  657.         XmLabel  view_window_label;
  658.         XmTextField  view_window_minx;
  659.         XmTextField  view_window_maxx;
  660.         XmTextField  view_window_miny;
  661.         XmTextField  view_window_maxy;
  662.         XmSeparator  view_plane_sep;
  663.         XmLabel  view_plane_label;
  664.         XmTextField  view_plane_dist;
  665.         XmTextField  view_plane_back;
  666.         XmTextField  view_plane_front;
  667.         XmSeparator  proj_vp_sep;
  668.         XmLabel  proj_vp_label;
  669.         XmTextField  proj_vp_minx;
  670.         XmTextField  proj_vp_maxx;
  671.         XmTextField  proj_vp_miny;
  672.         XmTextField  proj_vp_maxy;
  673.         XmTextField  proj_vp_minz;
  674.         XmTextField  proj_vp_maxz;
  675.         XmSeparator  proj_type_sep;
  676.         XmLabel  proj_type_label;
  677.         XmRadioBox  proj_type_box;
  678.             XmRowColumn     button_box;
  679.             };
  680.  
  681.         callbacks {
  682.             MrmNcreateCallback = procedure proc_pdraw_create (k_view_set);
  683.             };
  684.     };
  685.  
  686. !****************************** View Reference Point ********************
  687.  
  688. object
  689.     view_ref_pt_label : XmLabel {
  690.         arguments {
  691.         XmNtopAttachment = XmATTACH_FORM ;
  692.         XmNleftAttachment = XmATTACH_FORM ;
  693.         XmNunitType = XmPIXELS;
  694.             XmNlabelString = "View Reference Point";
  695.             };
  696.         };
  697.  
  698. object
  699.     view_ref_pt_x : XmTextField {
  700.         arguments {
  701.         XmNtopAttachment = XmATTACH_FORM;
  702.         XmNleftAttachment = XmATTACH_WIDGET;
  703.         XmNleftWidget = XmLabel view_ref_pt_label;
  704.             XmNwidth = 30;
  705.             XmNmaxLength = 3;
  706.             XmNvalue = "0";
  707.             };
  708.         callbacks {
  709.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_ref_pt_x);
  710.             };
  711.         };
  712.  
  713. object
  714.     view_ref_pt_y : XmTextField {
  715.         arguments {
  716.         XmNtopAttachment = XmATTACH_FORM;
  717.         XmNleftAttachment = XmATTACH_WIDGET;
  718.         XmNleftWidget = XmTextField view_ref_pt_x;
  719.             XmNwidth = 30;
  720.             XmNmaxLength = 3;
  721.             XmNvalue = "0";
  722.             };
  723.         callbacks {
  724.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_ref_pt_y);
  725.             };
  726.         };
  727.  
  728. object
  729.     view_ref_pt_z : XmTextField {
  730.         arguments {
  731.         XmNtopAttachment = XmATTACH_FORM;
  732.         XmNleftAttachment = XmATTACH_WIDGET;
  733.         XmNleftWidget = XmTextField view_ref_pt_y;
  734.             XmNwidth = 30;
  735.             XmNmaxLength = 3;
  736.             XmNvalue = "0";
  737.             };
  738.         callbacks {
  739.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_ref_pt_z);
  740.             };
  741.         };
  742.  
  743. !****************************** View Plane Normal  ********************
  744.  
  745. object
  746.     view_pl_norm_sep : XmSeparator {
  747.     arguments {
  748.         XmNleftAttachment =  XmATTACH_FORM;
  749.         XmNrightAttachment =  XmATTACH_FORM;
  750.         XmNtopAttachment = XmATTACH_WIDGET;
  751.         XmNtopWidget = XmTextField view_ref_pt_y;
  752.     };
  753.     };
  754.  
  755.  
  756. object
  757.     view_pl_norm_label : XmLabel {
  758.         arguments {
  759.         XmNtopAttachment = XmATTACH_WIDGET ;
  760.         XmNtopWidget = XmSeparator view_pl_norm_sep;
  761.         XmNleftAttachment = XmATTACH_FORM ;
  762.             XmNlabelString = "View Plane Normal";
  763.             };
  764.         };
  765.  
  766. object
  767.     view_pl_norm_x : XmTextField {
  768.         arguments {
  769.         XmNtopAttachment = XmATTACH_WIDGET ;
  770.         XmNtopWidget = XmSeparator view_pl_norm_sep;
  771.         XmNleftAttachment = XmATTACH_WIDGET;
  772.         XmNleftWidget = XmLabel view_pl_norm_label;
  773.             XmNwidth = 80;
  774.             XmNmaxLength = 8;
  775.             XmNvalue = "0";
  776.             };
  777.         callbacks {
  778.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_pl_norm_x);
  779.             };
  780.         };
  781.  
  782. object
  783.     view_pl_norm_y : XmTextField {
  784.         arguments {
  785.         XmNtopAttachment = XmATTACH_WIDGET ;
  786.         XmNtopWidget = XmSeparator view_pl_norm_sep;
  787.         XmNleftAttachment = XmATTACH_WIDGET;
  788.         XmNleftWidget = XmTextField view_pl_norm_x;
  789.             XmNwidth = 80;
  790.             XmNmaxLength = 8;
  791.             XmNvalue = "0";
  792.             };
  793.         callbacks {
  794.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_pl_norm_y);
  795.             };
  796.         };
  797.  
  798. object
  799.     view_pl_norm_z : XmTextField {
  800.         arguments {
  801.         XmNtopAttachment = XmATTACH_WIDGET ;
  802.         XmNtopWidget = XmSeparator view_pl_norm_sep;
  803.         XmNleftAttachment = XmATTACH_WIDGET;
  804.         XmNleftWidget = XmTextField view_pl_norm_y;
  805.             XmNwidth = 80;
  806.             XmNmaxLength = 8;
  807.             XmNvalue = "1";
  808.             };
  809.         callbacks {
  810.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_pl_norm_z);
  811.             };
  812.         };
  813.  
  814. !****************************** View Up Vector  ********************
  815.  
  816. object
  817.     view_up_vect_sep : XmSeparator {
  818.     arguments {
  819.         XmNleftAttachment =  XmATTACH_FORM;
  820.         XmNrightAttachment =  XmATTACH_FORM;
  821.         XmNtopAttachment = XmATTACH_WIDGET;
  822.         XmNtopWidget = XmTextField view_pl_norm_y;
  823.     };
  824.     };
  825.  
  826.  
  827. object
  828.     view_up_vect_label : XmLabel {
  829.         arguments {
  830.         XmNtopAttachment = XmATTACH_WIDGET ;
  831.         XmNtopWidget = XmSeparator view_up_vect_sep;
  832.         XmNleftAttachment = XmATTACH_FORM ;
  833.             XmNlabelString = "View Up Vector";
  834.             };
  835.         };
  836.  
  837. object
  838.     view_up_vect_x : XmTextField {
  839.         arguments {
  840.         XmNtopAttachment = XmATTACH_WIDGET ;
  841.         XmNtopWidget = XmSeparator view_up_vect_sep;
  842.         XmNleftAttachment = XmATTACH_WIDGET;
  843.         XmNleftWidget = XmLabel view_up_vect_label;
  844.             XmNwidth = 80;
  845.             XmNmaxLength = 8;
  846.             XmNvalue = "0";
  847.             };
  848.         callbacks {
  849.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_up_vect_x);
  850.             };
  851.         };
  852.  
  853. object
  854.     view_up_vect_y : XmTextField {
  855.         arguments {
  856.         XmNtopAttachment = XmATTACH_WIDGET ;
  857.         XmNtopWidget = XmSeparator view_up_vect_sep;
  858.         XmNleftAttachment = XmATTACH_WIDGET;
  859.         XmNleftWidget = XmTextField view_up_vect_x;
  860.             XmNwidth = 80;
  861.             XmNmaxLength = 8;
  862.             XmNvalue = "1";
  863.             };
  864.         callbacks {
  865.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_up_vect_y);
  866.             };
  867.         };
  868.  
  869. object
  870.     view_up_vect_z : XmTextField {
  871.         arguments {
  872.         XmNtopAttachment = XmATTACH_WIDGET ;
  873.         XmNtopWidget = XmSeparator view_up_vect_sep;
  874.         XmNleftAttachment = XmATTACH_WIDGET;
  875.         XmNleftWidget = XmTextField view_up_vect_y;
  876.             XmNwidth = 80;
  877.             XmNmaxLength = 8;
  878.             XmNvalue = "0";
  879.             };
  880.         callbacks {
  881.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_up_vect_z);
  882.             };
  883.         };
  884.  
  885. !****************************** Projection Reference Point *******************
  886.  
  887. object
  888.     proj_ref_pt_sep : XmSeparator {
  889.     arguments {
  890.         XmNleftAttachment =  XmATTACH_FORM;
  891.         XmNrightAttachment =  XmATTACH_FORM;
  892.         XmNtopAttachment = XmATTACH_WIDGET;
  893.         XmNtopWidget = XmTextField view_up_vect_y;
  894.     };
  895.     };
  896.  
  897.  
  898. object
  899.     proj_ref_pt_label : XmLabel {
  900.         arguments {
  901.         XmNtopAttachment = XmATTACH_WIDGET ;
  902.         XmNtopWidget = XmSeparator proj_ref_pt_sep;
  903.         XmNleftAttachment = XmATTACH_FORM ;
  904.             XmNlabelString = "Projection Reference Point";
  905.             };
  906.         };
  907.  
  908. object
  909.     proj_ref_pt_x : XmTextField {
  910.         arguments {
  911.         XmNtopAttachment = XmATTACH_WIDGET ;
  912.         XmNtopWidget = XmSeparator proj_ref_pt_sep;
  913.         XmNleftAttachment = XmATTACH_WIDGET;
  914.         XmNleftWidget = XmLabel proj_ref_pt_label;
  915.             XmNwidth = 30;
  916.             XmNmaxLength = 3;
  917.             XmNvalue = "0";
  918.             };
  919.         callbacks {
  920.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_ref_pt_x);
  921.             };
  922.         };
  923.  
  924. object
  925.     proj_ref_pt_y : XmTextField {
  926.         arguments {
  927.         XmNtopAttachment = XmATTACH_WIDGET ;
  928.         XmNtopWidget = XmSeparator proj_ref_pt_sep;
  929.         XmNleftAttachment = XmATTACH_WIDGET;
  930.         XmNleftWidget = XmTextField proj_ref_pt_x;
  931.             XmNwidth = 30;
  932.             XmNmaxLength = 3;
  933.             XmNvalue = "0";
  934.             };
  935.         callbacks {
  936.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_ref_pt_y);
  937.             };
  938.         };
  939.  
  940. object
  941.     proj_ref_pt_z : XmTextField {
  942.         arguments {
  943.         XmNtopAttachment = XmATTACH_WIDGET ;
  944.         XmNtopWidget = XmSeparator proj_ref_pt_sep;
  945.         XmNleftAttachment = XmATTACH_WIDGET;
  946.         XmNleftWidget = XmTextField proj_ref_pt_y;
  947.             XmNwidth = 30;
  948.             XmNmaxLength = 3;
  949.             XmNvalue = "10";
  950.             };
  951.         callbacks {
  952.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_ref_pt_z);
  953.             };
  954.         };
  955.  
  956. !****************************** View Window *******************
  957.  
  958. object
  959.     view_window_sep : XmSeparator {
  960.     arguments {
  961.         XmNleftAttachment =  XmATTACH_FORM;
  962.         XmNrightAttachment =  XmATTACH_FORM;
  963.         XmNtopAttachment = XmATTACH_WIDGET;
  964.         XmNtopWidget = XmTextField proj_ref_pt_y;
  965.     };
  966.     };
  967.  
  968.  
  969. object
  970.     view_window_label : XmLabel {
  971.         arguments {
  972.         XmNtopAttachment = XmATTACH_WIDGET ;
  973.         XmNtopWidget = XmSeparator view_window_sep;
  974.         XmNleftAttachment = XmATTACH_FORM ;
  975.             XmNlabelString = "View Window - minx, maxx, miny, maxy";
  976.             };
  977.         };
  978.  
  979. object
  980.     view_window_minx : XmTextField {
  981.         arguments {
  982.         XmNtopAttachment = XmATTACH_WIDGET ;
  983.         XmNtopWidget = XmSeparator view_window_sep;
  984.         XmNleftAttachment = XmATTACH_WIDGET;
  985.         XmNleftWidget = XmLabel view_window_label;
  986.             XmNwidth = 30;
  987.             XmNmaxLength = 3;
  988.             XmNvalue = "-3";
  989.             };
  990.         callbacks {
  991.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_window_minx);
  992.             };
  993.         };
  994.  
  995. object
  996.     view_window_maxx : XmTextField {
  997.         arguments {
  998.         XmNtopAttachment = XmATTACH_WIDGET ;
  999.         XmNtopWidget = XmSeparator view_window_sep;
  1000.         XmNleftAttachment = XmATTACH_WIDGET;
  1001.         XmNleftWidget = XmTextField view_window_minx;
  1002.             XmNwidth = 30;
  1003.             XmNmaxLength = 3;
  1004.             XmNvalue = "3";
  1005.             };
  1006.         callbacks {
  1007.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_window_maxx);
  1008.             };
  1009.         };
  1010.  
  1011. object
  1012.     view_window_miny : XmTextField {
  1013.         arguments {
  1014.         XmNtopAttachment = XmATTACH_WIDGET ;
  1015.         XmNtopWidget = XmSeparator view_window_sep;
  1016.         XmNleftAttachment = XmATTACH_WIDGET;
  1017.         XmNleftWidget = XmTextField view_window_maxx;
  1018.             XmNwidth = 30;
  1019.             XmNmaxLength = 3;
  1020.             XmNvalue = "-3";
  1021.             };
  1022.         callbacks {
  1023.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_window_miny);
  1024.             };
  1025.         };
  1026.  
  1027. object
  1028.     view_window_maxy : XmTextField {
  1029.         arguments {
  1030.         XmNtopAttachment = XmATTACH_WIDGET ;
  1031.         XmNtopWidget = XmSeparator view_window_sep;
  1032.         XmNleftAttachment = XmATTACH_WIDGET;
  1033.         XmNleftWidget = XmTextField view_window_miny;
  1034.             XmNwidth = 30;
  1035.             XmNmaxLength = 3;
  1036.             XmNvalue = "3";
  1037.             };
  1038.         callbacks {
  1039.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_window_maxy);
  1040.             };
  1041.         };
  1042.  
  1043. !****************************** View Plane Distance, Back & Front *************
  1044.  
  1045. object
  1046.     view_plane_sep : XmSeparator {
  1047.     arguments {
  1048.         XmNleftAttachment =  XmATTACH_FORM;
  1049.         XmNrightAttachment =  XmATTACH_FORM;
  1050.         XmNtopAttachment = XmATTACH_WIDGET;
  1051.         XmNtopWidget = XmTextField view_window_maxy;
  1052.     };
  1053.     };
  1054.  
  1055.  
  1056. object
  1057.     view_plane_label : XmLabel {
  1058.         arguments {
  1059.         XmNtopAttachment = XmATTACH_WIDGET ;
  1060.         XmNtopWidget = XmSeparator view_plane_sep;
  1061.         XmNleftAttachment = XmATTACH_FORM ;
  1062.             XmNlabelString = "View Plane, Back & Front";
  1063.             };
  1064.         };
  1065.  
  1066. object
  1067.     view_plane_dist : XmTextField {
  1068.         arguments {
  1069.         XmNtopAttachment = XmATTACH_WIDGET ;
  1070.         XmNtopWidget = XmSeparator view_plane_sep;
  1071.         XmNleftAttachment = XmATTACH_WIDGET;
  1072.         XmNleftWidget = XmLabel view_plane_label;
  1073.             XmNwidth = 30;
  1074.             XmNmaxLength = 3;
  1075.             XmNvalue = "0";
  1076.             };
  1077.         callbacks {
  1078.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_plane_dist);
  1079.             };
  1080.         };
  1081.  
  1082. object
  1083.     view_plane_back : XmTextField {
  1084.         arguments {
  1085.         XmNtopAttachment = XmATTACH_WIDGET ;
  1086.         XmNtopWidget = XmSeparator view_plane_sep;
  1087.         XmNleftAttachment = XmATTACH_WIDGET;
  1088.         XmNleftWidget = XmTextField view_plane_dist;
  1089.             XmNwidth = 30;
  1090.             XmNmaxLength = 3;
  1091.             XmNvalue = "-5";
  1092.             };
  1093.         callbacks {
  1094.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_plane_back);
  1095.             };
  1096.         };
  1097.  
  1098. object
  1099.     view_plane_front : XmTextField {
  1100.         arguments {
  1101.         XmNtopAttachment = XmATTACH_WIDGET ;
  1102.         XmNtopWidget = XmSeparator view_plane_sep;
  1103.         XmNleftAttachment = XmATTACH_WIDGET;
  1104.         XmNleftWidget = XmTextField view_plane_back;
  1105.             XmNwidth = 30;
  1106.             XmNmaxLength = 3;
  1107.             XmNvalue = "5";
  1108.             };
  1109.         callbacks {
  1110.         MrmNcreateCallback = procedure proc_pdraw_create(k_view_plane_front);
  1111.             };
  1112.         };
  1113.  
  1114. !****************************** Projection Viewport  *******************
  1115.  
  1116. object
  1117.     proj_vp_sep : XmSeparator {
  1118.     arguments {
  1119.         XmNleftAttachment =  XmATTACH_FORM;
  1120.         XmNrightAttachment =  XmATTACH_FORM;
  1121.         XmNtopAttachment = XmATTACH_WIDGET;
  1122.         XmNtopWidget = XmTextField view_plane_front;
  1123.     };
  1124.     };
  1125.  
  1126.  
  1127. object
  1128.     proj_vp_label : XmLabel {
  1129.         arguments {
  1130.         XmNtopAttachment = XmATTACH_WIDGET ;
  1131.         XmNtopWidget = XmSeparator proj_vp_sep;
  1132.         XmNleftAttachment = XmATTACH_FORM ;
  1133.             XmNlabelString = "Projection Viewport";
  1134.             };
  1135.         };
  1136.  
  1137. object
  1138.     proj_vp_minx : XmTextField {
  1139.         arguments {
  1140.         XmNtopAttachment = XmATTACH_WIDGET ;
  1141.         XmNtopWidget = XmSeparator proj_vp_sep;
  1142.         XmNleftAttachment = XmATTACH_WIDGET;
  1143.         XmNleftWidget = XmLabel proj_vp_label;
  1144.             XmNwidth = 30;
  1145.             XmNmaxLength = 3;
  1146.             XmNvalue = "0";
  1147.             };
  1148.         callbacks {
  1149.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_vp_minx);
  1150.             };
  1151.         };
  1152.  
  1153. object
  1154.     proj_vp_maxx : XmTextField {
  1155.         arguments {
  1156.         XmNtopAttachment = XmATTACH_WIDGET ;
  1157.         XmNtopWidget = XmSeparator proj_vp_sep;
  1158.         XmNleftAttachment = XmATTACH_WIDGET;
  1159.         XmNleftWidget = XmTextField proj_vp_minx;
  1160.             XmNwidth = 30;
  1161.             XmNmaxLength = 3;
  1162.             XmNvalue = "1";
  1163.             };
  1164.         callbacks {
  1165.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_vp_maxx);
  1166.             };
  1167.         };
  1168.  
  1169. object
  1170.     proj_vp_miny : XmTextField {
  1171.         arguments {
  1172.         XmNtopAttachment = XmATTACH_WIDGET ;
  1173.         XmNtopWidget = XmSeparator proj_vp_sep;
  1174.         XmNleftAttachment = XmATTACH_WIDGET;
  1175.         XmNleftWidget = XmTextField proj_vp_maxx;
  1176.             XmNwidth = 30;
  1177.             XmNmaxLength = 3;
  1178.             XmNvalue = "0";
  1179.             };
  1180.         callbacks {
  1181.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_vp_miny);
  1182.             };
  1183.         };
  1184.  
  1185. object
  1186.     proj_vp_maxy : XmTextField {
  1187.         arguments {
  1188.         XmNtopAttachment = XmATTACH_WIDGET ;
  1189.         XmNtopWidget = XmSeparator proj_vp_sep;
  1190.         XmNleftAttachment = XmATTACH_WIDGET;
  1191.         XmNleftWidget = XmTextField proj_vp_miny;
  1192.             XmNwidth = 30;
  1193.             XmNmaxLength = 3;
  1194.             XmNvalue = "1";
  1195.             };
  1196.         callbacks {
  1197.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_vp_maxy);
  1198.             };
  1199.         };
  1200.  
  1201. object
  1202.     proj_vp_minz : XmTextField {
  1203.         arguments {
  1204.         XmNtopAttachment = XmATTACH_WIDGET ;
  1205.         XmNtopWidget = XmSeparator proj_vp_sep;
  1206.         XmNleftAttachment = XmATTACH_WIDGET;
  1207.         XmNleftWidget = XmTextField proj_vp_maxy;
  1208.             XmNwidth = 30;
  1209.             XmNmaxLength = 3;
  1210.             XmNvalue = "0";
  1211.             };
  1212.         callbacks {
  1213.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_vp_minz);
  1214.             };
  1215.         };
  1216.  
  1217. object
  1218.     proj_vp_maxz : XmTextField {
  1219.         arguments {
  1220.         XmNtopAttachment = XmATTACH_WIDGET ;
  1221.         XmNtopWidget = XmSeparator proj_vp_sep;
  1222.         XmNleftAttachment = XmATTACH_WIDGET;
  1223.         XmNleftWidget = XmTextField proj_vp_minz;
  1224.             XmNwidth = 30;
  1225.             XmNmaxLength = 3;
  1226.             XmNvalue = "1";
  1227.             };
  1228.         callbacks {
  1229.         MrmNcreateCallback = procedure proc_pdraw_create(k_proj_vp_maxz);
  1230.             };
  1231.         };
  1232.  
  1233. !********************************* Projection type
  1234.  
  1235.  
  1236. object
  1237.     proj_type_sep : XmSeparator {
  1238.     arguments {
  1239.         XmNleftAttachment =  XmATTACH_FORM;
  1240.         XmNrightAttachment =  XmATTACH_FORM;
  1241.         XmNtopAttachment = XmATTACH_WIDGET;
  1242.         XmNtopWidget = XmTextField proj_vp_maxz;
  1243.     };
  1244.     };
  1245.  
  1246. object
  1247.     proj_type_label : XmLabel {
  1248.         arguments {
  1249.         XmNleftAttachment =  XmATTACH_FORM;
  1250.         XmNtopAttachment = XmATTACH_WIDGET;
  1251.         XmNtopWidget =  XmSeparator proj_type_sep;
  1252.             XmNlabelString = "Projection Type";
  1253.             };
  1254.     };
  1255.  
  1256. object
  1257.     proj_type_box : XmRadioBox {
  1258.         arguments {
  1259.             XmNorientation = XmHORIZONTAL;
  1260.         XmNleftAttachment =  XmATTACH_WIDGET;
  1261.         XmNleftWidget = XmLabel proj_type_label;
  1262.         XmNtopAttachment = XmATTACH_WIDGET;
  1263.         XmNtopWidget =  XmSeparator proj_type_sep;
  1264.             XmNborderWidth = 0;
  1265.         XmNisHomogeneous = false;
  1266.             };
  1267.         controls {
  1268.             XmToggleButton   proj_type_para;
  1269.             XmToggleButton   proj_type_persp;
  1270.             };
  1271.         };
  1272.                                                                                                               
  1273. object
  1274.     proj_type_para : XmToggleButton {
  1275.         arguments {
  1276.             XmNlabelString = "Parallel";
  1277.             XmNset = on;   ! A radio box requires one toggle to be set.
  1278.             };                                                             
  1279.         callbacks {
  1280.             MrmNcreateCallback = procedure proc_pdraw_create (k_proj_type_para);
  1281.             };
  1282.         };
  1283.  
  1284. object
  1285.     proj_type_persp : XmToggleButton {
  1286.         arguments {
  1287.             XmNlabelString = "Perspective";
  1288.             };
  1289.         callbacks {
  1290.             MrmNcreateCallback = procedure proc_pdraw_create (k_proj_type_persp);
  1291.             };
  1292.         };
  1293.  
  1294. !*****************************  Bottom Buttons ******************************
  1295.  
  1296. object
  1297.     button_box : XmRowColumn {
  1298.         arguments {
  1299.             XmNorientation = XmHORIZONTAL;
  1300.         XmNleftAttachment =  XmATTACH_FORM;
  1301.         XmNrightAttachment =  XmATTACH_FORM;
  1302.         XmNbottomAttachment =  XmATTACH_FORM;
  1303.             XmNborderWidth = 2;
  1304.             XmNentryBorder = 3;
  1305.             };
  1306.         controls {                                                  
  1307.             XmPushButton     apply_button;
  1308.             XmPushButton     dismiss_button;
  1309.             XmPushButton     can_button;
  1310.             };
  1311.         };
  1312.  
  1313. object
  1314.     apply_button : XmPushButton widget { ! The menu positions the buttons
  1315.         arguments {                     !  automatically.
  1316.             XmNlabelString = "apply";
  1317.             XmNforeground = yellow;
  1318.             XmNbackground = red;
  1319.             XmNhighlightColor = magenta;
  1320.             XmNborderColor = green;
  1321.         XmNaccelerator = "Ctrl <key>a";
  1322.         XmNacceleratorText = "^a";
  1323.             };
  1324.         callbacks {
  1325.             MrmNcreateCallback = procedure proc_pdraw_create (k_apply_vs);
  1326.             XmNactivateCallback = procedure proc_pdraw_activate (k_apply_vs);
  1327.         };
  1328.     };
  1329.  
  1330. object
  1331.     can_button : XmPushButton widget {                       
  1332.         arguments {
  1333.             XmNlabelString = "reset";
  1334.             XmNforeground = yellow;
  1335.             XmNbackground = red;
  1336.             XmNhighlightColor = magenta;
  1337.             XmNborderColor = green;
  1338.             };
  1339.         callbacks {
  1340.             MrmNcreateCallback = procedure proc_pdraw_create (k_reset_vs);
  1341.             XmNactivateCallback = procedure proc_pdraw_activate (k_reset_vs);
  1342.         };
  1343.     };
  1344.  
  1345. object
  1346.     dismiss_button : XmPushButton widget {
  1347.         arguments {
  1348.             XmNlabelString = "dismiss";
  1349.             XmNforeground = yellow;
  1350.             XmNbackground = red;
  1351.             XmNhighlightColor = magenta;
  1352.             XmNborderColor = green;
  1353.         };
  1354.         callbacks {
  1355.             MrmNcreateCallback = procedure proc_pdraw_create (k_dismiss_vs);
  1356.             XmNactivateCallback = procedure proc_pdraw_activate (k_dismiss_vs);
  1357.         };
  1358.     };
  1359.  
  1360. !************************************************************************
  1361. ! end of Set View Form
  1362. !************************************************************************
  1363.  
  1364. !************************************************************************
  1365. ! The Light Form
  1366. !************************************************************************
  1367.  
  1368. object
  1369.     light_dialog : XmFormDialog {
  1370.         arguments {
  1371.             XmNdialogTitle = "PHIGS Light Options";
  1372.             XmNdialogStyle = XmDIALOG_MODELESS;
  1373.         XmNheight = 400;
  1374.         XmNwidth = 360;
  1375. !        XmNmwmDecorations = 30;
  1376.             XmNbackground = lightblue;
  1377.         };
  1378.         controls {
  1379.             XmLabel     light_toggles_label;
  1380.             XmRowColumn light_toggles_box;
  1381.         XmSeparator    light_radio_sep;
  1382.             XmLabel     light_radio_label;
  1383.             XmRadioBox     light_radio_box;
  1384.         XmSeparator    light_type_sep;
  1385.         XmLabel    light_type_label;
  1386.         XmRadioBox    light_type_box;
  1387.         XmSeparator    light_pos_sep;
  1388.         XmLabel    light_pos_label;
  1389.         XmTextField    light_pos_x;
  1390.         XmTextField    light_pos_y;
  1391.         XmTextField    light_pos_z;
  1392.         XmSeparator    light_color_sep;
  1393.         XmLabel    light_color_label;
  1394.         XmTextField    light_color_red;
  1395.         XmTextField    light_color_green;
  1396.         XmTextField    light_color_blue;
  1397.         XmSeparator    light_direction_sep;
  1398.         XmLabel    light_direction_label;
  1399.         XmTextField    light_direction_x;
  1400.         XmTextField    light_direction_y;
  1401.         XmTextField    light_direction_z;
  1402.         XmSeparator    light_coeff_sep;
  1403.         XmLabel    light_coeff_label;
  1404.         XmTextField    light_coeff_const;
  1405.         XmTextField    light_coeff_dist;
  1406.         XmSeparator    light_conc_exp_sep;
  1407.         XmLabel    light_conc_exp_label;
  1408.         XmTextField    light_conc_exp;
  1409.         XmSeparator    light_spread_angle_sep;
  1410.         XmLabel    light_spread_angle_label;
  1411.         XmTextField    light_spread_angle;
  1412.             XmRowColumn light_button_box;
  1413.             };
  1414.  
  1415.         callbacks {
  1416.             MrmNcreateCallback = procedure proc_pdraw_create (k_light);
  1417.             };
  1418.     };
  1419.  
  1420. !****************************** Light On/Off Toggles ********************
  1421.  
  1422. object
  1423.     light_toggles_label : XmLabel {
  1424.         arguments {
  1425.         XmNtopAttachment = XmATTACH_FORM ;
  1426.         XmNleftAttachment = XmATTACH_FORM ;
  1427.             XmNlabelString = "THIS FORM DOES NOTHING ! ! !";
  1428.             };
  1429.         };
  1430.  
  1431. object
  1432.     light_toggles_box : XmRowColumn {
  1433.         arguments {
  1434.         XmNleftAttachment = XmATTACH_FORM ;
  1435.         XmNrightAttachment = XmATTACH_FORM ;
  1436.         XmNtopAttachment = XmATTACH_WIDGET;
  1437.         XmNtopWidget = XmLabel light_toggles_label;
  1438.             XmNorientation = XmHORIZONTAL;
  1439.             XmNbackground = lightblue;
  1440.             XmNborderWidth = 0;
  1441.             };
  1442.         controls {
  1443.             XmToggleButton   light_on1;
  1444.             XmToggleButton   light_on2;
  1445.             XmToggleButton   light_on3;
  1446.             XmToggleButton   light_on4;
  1447.             XmToggleButton   light_on5;
  1448.             XmToggleButton   light_on6;
  1449.             XmToggleButton   light_on7;
  1450.             XmToggleButton   light_on8;
  1451.             };
  1452.         };
  1453.  
  1454.  
  1455. object
  1456.     light_on1 : XmToggleButton {
  1457.         arguments {
  1458.             XmNlabelString = "1";
  1459.             };
  1460.         callbacks {
  1461.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on1);
  1462.             };
  1463.         };
  1464. object
  1465.     light_on2 : XmToggleButton {
  1466.         arguments {
  1467.             XmNlabelString = "2";
  1468.             };
  1469.         callbacks {
  1470.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on2);
  1471.             };
  1472.         };
  1473. object
  1474.     light_on3 : XmToggleButton {
  1475.         arguments {
  1476.             XmNlabelString = "3";
  1477.             };
  1478.         callbacks {
  1479.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on3);
  1480.             };
  1481.         };
  1482. object
  1483.     light_on4 : XmToggleButton {
  1484.         arguments {
  1485.             XmNlabelString = "4";
  1486.             };
  1487.         callbacks {
  1488.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on4);
  1489.             };
  1490.         };
  1491. object
  1492.     light_on5 : XmToggleButton {
  1493.         arguments {
  1494.             XmNlabelString = "5";
  1495.             };
  1496.         callbacks {
  1497.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on5);
  1498.             };
  1499.         };
  1500. object
  1501.     light_on6 : XmToggleButton {
  1502.         arguments {
  1503.             XmNlabelString = "6";
  1504.             };
  1505.         callbacks {
  1506.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on6);
  1507.             };
  1508.         };
  1509. object
  1510.     light_on7 : XmToggleButton {
  1511.         arguments {
  1512.             XmNlabelString = "7";
  1513.             };
  1514.         callbacks {
  1515.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on7);
  1516.             };
  1517.         };
  1518. object
  1519.     light_on8 : XmToggleButton {
  1520.         arguments {
  1521.             XmNlabelString = "8";
  1522.             };
  1523.         callbacks {
  1524.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_on8);
  1525.             };
  1526.         };
  1527.  
  1528. !****************************** Light Radio Toggles ********************
  1529. object
  1530.     light_radio_sep : XmSeparator {
  1531.     arguments {
  1532.         XmNleftAttachment =  XmATTACH_FORM;
  1533.         XmNrightAttachment =  XmATTACH_FORM;
  1534.         XmNtopAttachment = XmATTACH_WIDGET;
  1535.         XmNtopWidget = XmRowColumn light_toggles_box;
  1536.     };
  1537.     };
  1538.  
  1539. object
  1540.     light_radio_label : XmLabel {
  1541.         arguments {
  1542.         XmNtopAttachment = XmATTACH_WIDGET ;
  1543.         XmNtopWidget = XmSeparator light_radio_sep;
  1544.         XmNleftAttachment = XmATTACH_FORM ;
  1545.         XmNrightAttachment = XmATTACH_FORM ;
  1546.             XmNlabelString = "Light Edit Selector";
  1547.             };
  1548.         };
  1549.  
  1550. object
  1551.     light_radio_box : XmRadioBox {
  1552.         arguments {
  1553.         XmNtopAttachment = XmATTACH_WIDGET ;
  1554.         XmNtopWidget = XmLabel light_radio_label;
  1555.         XmNleftAttachment = XmATTACH_FORM ;
  1556.         XmNrightAttachment = XmATTACH_FORM ;
  1557.             XmNorientation = XmHORIZONTAL;
  1558.             XmNborderWidth = 1;
  1559.             };
  1560.         controls {
  1561.             XmToggleButton   light_edit1;
  1562.             XmToggleButton   light_edit2;
  1563.             XmToggleButton   light_edit3;
  1564.             XmToggleButton   light_edit4;
  1565.             XmToggleButton   light_edit5;
  1566.             XmToggleButton   light_edit6;
  1567.             XmToggleButton   light_edit7;
  1568.             XmToggleButton   light_edit8;
  1569.             };
  1570.         };
  1571.  
  1572.  
  1573. object
  1574.     light_edit1 : XmToggleButton {
  1575.         arguments {
  1576.             XmNlabelString = "1";
  1577.             };
  1578.         callbacks {
  1579.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit1);
  1580.             };
  1581.         };
  1582. object
  1583.     light_edit2 : XmToggleButton {
  1584.         arguments {
  1585.             XmNlabelString = "2";
  1586.             };
  1587.         callbacks {
  1588.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit2);
  1589.             };
  1590.         };
  1591. object
  1592.     light_edit3 : XmToggleButton {
  1593.         arguments {
  1594.             XmNlabelString = "3";
  1595.             };
  1596.         callbacks {
  1597.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit3);
  1598.             };
  1599.         };
  1600. object
  1601.     light_edit4 : XmToggleButton {
  1602.         arguments {
  1603.             XmNlabelString = "4";
  1604.             };
  1605.         callbacks {
  1606.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit4);
  1607.             };
  1608.         };
  1609. object
  1610.     light_edit5 : XmToggleButton {
  1611.         arguments {
  1612.             XmNlabelString = "5";
  1613.             };
  1614.         callbacks {
  1615.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit5);
  1616.             };
  1617.         };
  1618. object
  1619.     light_edit6 : XmToggleButton {
  1620.         arguments {
  1621.             XmNlabelString = "6";
  1622.             };
  1623.         callbacks {
  1624.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit6);
  1625.             };
  1626.         };
  1627. object
  1628.     light_edit7 : XmToggleButton {
  1629.         arguments {
  1630.             XmNlabelString = "7";
  1631.             };
  1632.         callbacks {
  1633.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit7);
  1634.             };
  1635.         };
  1636. object
  1637.     light_edit8 : XmToggleButton {
  1638.         arguments {
  1639.             XmNlabelString = "8";
  1640.             };
  1641.         callbacks {
  1642.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_edit8);
  1643.             };
  1644.         };
  1645.  
  1646. !****************************** Light Type Radio ********************
  1647. object
  1648.     light_type_sep : XmSeparator {
  1649.     arguments {
  1650.         XmNleftAttachment =  XmATTACH_FORM;
  1651.         XmNrightAttachment =  XmATTACH_FORM;
  1652.         XmNtopAttachment = XmATTACH_WIDGET;
  1653.         XmNtopWidget = XmRadioBox light_radio_box;
  1654.     };
  1655.     };
  1656.  
  1657. object
  1658.     light_type_label : XmLabel {
  1659.         arguments {
  1660.         XmNtopAttachment = XmATTACH_WIDGET ;
  1661.         XmNtopWidget = XmSeparator light_type_sep;
  1662.         XmNleftAttachment = XmATTACH_FORM ;
  1663.         XmNrightAttachment = XmATTACH_FORM;
  1664.             XmNlabelString = "Light Type";
  1665.             };
  1666.         };
  1667.  
  1668. object
  1669.     light_type_box : XmRadioBox {
  1670.         arguments {
  1671.         XmNtopAttachment = XmATTACH_WIDGET ;
  1672.         XmNtopWidget = XmLabel light_type_label;
  1673.         XmNleftAttachment = XmATTACH_FORM;
  1674.         XmNrightAttachment = XmATTACH_FORM;
  1675.             XmNorientation = XmHORIZONTAL;
  1676.             XmNborderWidth = 1;
  1677.             };
  1678.         controls {
  1679.             XmToggleButton   light_type_ambient;
  1680.             XmToggleButton   light_type_directional;
  1681.             XmToggleButton   light_type_positional;
  1682.             XmToggleButton   light_type_spot;
  1683.             };
  1684.         };
  1685.  
  1686. object
  1687.     light_type_ambient : XmToggleButton {
  1688.         arguments {
  1689.             XmNlabelString = "Ambient";
  1690.             };
  1691.         callbacks {
  1692.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_type_ambient);
  1693.             };
  1694.         };
  1695. object
  1696.     light_type_directional : XmToggleButton {
  1697.         arguments {
  1698.             XmNlabelString = "Directional";
  1699.             };
  1700.         callbacks {
  1701.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_type_directional);
  1702.             };
  1703.         };
  1704. object
  1705.     light_type_positional : XmToggleButton {
  1706.         arguments {
  1707.             XmNlabelString = "Positional";
  1708.             };
  1709.         callbacks {
  1710.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_type_positional);
  1711.             };
  1712.         };
  1713. object
  1714.     light_type_spot : XmToggleButton {
  1715.         arguments {
  1716.             XmNlabelString = "Spot";
  1717.             };
  1718.         callbacks {
  1719.             XmNvalueChangedCallback = procedure proc_pdraw_activate (k_light_type_spot);
  1720.             };
  1721.        };
  1722.  
  1723. !*************************************************************** light pos *
  1724.  
  1725. object
  1726.     light_pos_sep : XmSeparator {
  1727.     arguments {
  1728.         XmNleftAttachment =  XmATTACH_FORM;
  1729.         XmNrightAttachment =  XmATTACH_FORM;
  1730.         XmNtopAttachment = XmATTACH_WIDGET;
  1731.         XmNtopWidget = XmRadioBox light_type_box;
  1732.     };
  1733.     };
  1734.  
  1735.  
  1736. object
  1737.     light_pos_label : XmLabel {
  1738.         arguments {
  1739.         XmNtopAttachment = XmATTACH_WIDGET ;
  1740.         XmNtopWidget = XmSeparator light_pos_sep;
  1741.         XmNrightAttachment = XmATTACH_FORM ;
  1742.         XmNleftAttachment = XmATTACH_FORM ;
  1743.             XmNlabelString = "Light Position";
  1744.             };
  1745.         };
  1746.  
  1747. object
  1748.     light_pos_x : XmTextField {
  1749.         arguments {
  1750.         XmNtopAttachment = XmATTACH_WIDGET ;
  1751.         XmNtopWidget = XmSeparator light_pos_sep;
  1752.         XmNleftAttachment = XmATTACH_WIDGET;
  1753.         XmNleftWidget = XmLabel light_pos_label;
  1754.             XmNwidth = 30;
  1755.             XmNmaxLength = 3;
  1756.             XmNvalue = "0";
  1757.             };
  1758.         callbacks {
  1759.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_pos_x);
  1760.             };
  1761.         };
  1762.  
  1763. object
  1764.     light_pos_y : XmTextField {
  1765.         arguments {
  1766.         XmNtopAttachment = XmATTACH_WIDGET ;
  1767.         XmNtopWidget = XmSeparator light_pos_sep;
  1768.         XmNleftAttachment = XmATTACH_WIDGET;
  1769.         XmNleftWidget = XmTextField light_pos_x;
  1770.             XmNwidth = 30;
  1771.             XmNmaxLength = 3;
  1772.             XmNvalue = "1";
  1773.             };
  1774.         callbacks {
  1775.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_pos_y);
  1776.             };
  1777.         };
  1778.  
  1779. object
  1780.     light_pos_z : XmTextField {
  1781.         arguments {
  1782.         XmNtopAttachment = XmATTACH_WIDGET ;
  1783.         XmNtopWidget = XmSeparator light_pos_sep;
  1784.         XmNleftAttachment = XmATTACH_WIDGET;
  1785.         XmNleftWidget = XmTextField light_pos_y;
  1786.             XmNwidth = 30;
  1787.             XmNmaxLength = 3;
  1788.             XmNvalue = "0";
  1789.             };
  1790.         callbacks {
  1791.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_pos_z);
  1792.             };
  1793.         };
  1794.  
  1795. !****************************** light color ********************************
  1796.  
  1797. object
  1798.     light_color_sep : XmSeparator {
  1799.     arguments {
  1800.         XmNleftAttachment =  XmATTACH_FORM;
  1801.         XmNrightAttachment =  XmATTACH_FORM;
  1802.         XmNtopAttachment = XmATTACH_WIDGET;
  1803.         XmNtopWidget = XmTextField light_pos_z;
  1804.     };
  1805.     };
  1806.  
  1807. object
  1808.     light_color_label : XmLabel {
  1809.         arguments {
  1810.         XmNtopAttachment = XmATTACH_WIDGET ;
  1811.         XmNtopWidget = XmSeparator light_color_sep;
  1812.         XmNleftAttachment = XmATTACH_FORM ;
  1813.             XmNlabelString = "Light Color - red, green, blue";
  1814.             };
  1815.         };
  1816.  
  1817. object
  1818.     light_color_red : XmTextField {
  1819.         arguments {
  1820.         XmNtopAttachment = XmATTACH_WIDGET ;
  1821.         XmNtopWidget = XmSeparator light_color_sep;
  1822.         XmNleftAttachment = XmATTACH_WIDGET;
  1823.         XmNleftWidget = XmLabel light_color_label;
  1824.             XmNwidth = 30;
  1825.             XmNmaxLength = 3;
  1826.             XmNvalue = "-1";
  1827.             };
  1828.         callbacks {
  1829.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_color_red);
  1830.             };
  1831.         };
  1832.  
  1833. object
  1834.     light_color_green : XmTextField {
  1835.         arguments {
  1836.         XmNtopAttachment = XmATTACH_WIDGET ;
  1837.         XmNtopWidget = XmSeparator light_color_sep;
  1838.         XmNleftAttachment = XmATTACH_WIDGET;
  1839.         XmNleftWidget = XmTextField light_color_red;
  1840.             XmNwidth = 30;
  1841.             XmNmaxLength = 3;
  1842.             XmNvalue = "1";
  1843.             };
  1844.         callbacks {
  1845.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_color_green);
  1846.             };
  1847.         };
  1848.  
  1849. object
  1850.     light_color_blue : XmTextField {
  1851.         arguments {
  1852.         XmNtopAttachment = XmATTACH_WIDGET ;
  1853.         XmNtopWidget = XmSeparator light_color_sep;
  1854.         XmNleftAttachment = XmATTACH_WIDGET;
  1855.         XmNleftWidget = XmTextField light_color_green;
  1856.             XmNwidth = 30;
  1857.             XmNmaxLength = 3;
  1858.             XmNvalue = "-1";
  1859.             };
  1860.         callbacks {
  1861.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_color_blue);
  1862.             };
  1863.         };
  1864.  
  1865. !****************************** light direction *************
  1866.  
  1867. object
  1868.     light_direction_sep : XmSeparator {
  1869.     arguments {
  1870.         XmNleftAttachment =  XmATTACH_FORM;
  1871.         XmNrightAttachment =  XmATTACH_FORM;
  1872.         XmNtopAttachment = XmATTACH_WIDGET;
  1873.         XmNtopWidget = XmTextField light_color_blue;
  1874.     };
  1875.     };
  1876.  
  1877.  
  1878. object
  1879.     light_direction_label : XmLabel {
  1880.         arguments {
  1881.         XmNtopAttachment = XmATTACH_WIDGET ;
  1882.         XmNtopWidget = XmSeparator light_direction_sep;
  1883.         XmNleftAttachment = XmATTACH_FORM ;
  1884.             XmNlabelString = "View Direction, Back & Front";
  1885.             };
  1886.         };
  1887.  
  1888. object
  1889.     light_direction_x : XmTextField {
  1890.         arguments {
  1891.         XmNtopAttachment = XmATTACH_WIDGET ;
  1892.         XmNtopWidget = XmSeparator light_direction_sep;
  1893.         XmNleftAttachment = XmATTACH_WIDGET;
  1894.         XmNleftWidget = XmLabel light_direction_label;
  1895.             XmNwidth = 30;
  1896.             XmNmaxLength = 3;
  1897.             XmNvalue = "0";
  1898.             };
  1899.         callbacks {
  1900.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_direction_x);
  1901.             };
  1902.         };
  1903.  
  1904. object
  1905.     light_direction_y : XmTextField {
  1906.         arguments {
  1907.         XmNtopAttachment = XmATTACH_WIDGET ;
  1908.         XmNtopWidget = XmSeparator light_direction_sep;
  1909.         XmNleftAttachment = XmATTACH_WIDGET;
  1910.         XmNleftWidget = XmTextField light_direction_x;
  1911.             XmNwidth = 30;
  1912.             XmNmaxLength = 3;
  1913.             XmNvalue = "0";
  1914.             };
  1915.         callbacks {
  1916.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_direction_y);
  1917.             };
  1918.         };
  1919.  
  1920. object
  1921.     light_direction_z : XmTextField {
  1922.         arguments {
  1923.         XmNtopAttachment = XmATTACH_WIDGET ;
  1924.         XmNtopWidget = XmSeparator light_direction_sep;
  1925.         XmNleftAttachment = XmATTACH_WIDGET;
  1926.         XmNleftWidget = XmTextField light_direction_y;
  1927.             XmNwidth = 30;
  1928.             XmNmaxLength = 3;
  1929.             XmNvalue = "-1";
  1930.             };
  1931.         callbacks {
  1932.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_direction_z);
  1933.             };
  1934.         };
  1935.  
  1936.  
  1937. !****************************** light attenuation coefficients *************
  1938.  
  1939. object
  1940.     light_coeff_sep : XmSeparator {
  1941.     arguments {
  1942.         XmNleftAttachment =  XmATTACH_FORM;
  1943.         XmNrightAttachment =  XmATTACH_FORM;
  1944.         XmNtopAttachment = XmATTACH_WIDGET;
  1945.         XmNtopWidget = XmTextField light_direction_z;
  1946.     };
  1947.     };
  1948.  
  1949.  
  1950. object
  1951.     light_coeff_label : XmLabel {
  1952.         arguments {
  1953.         XmNtopAttachment = XmATTACH_WIDGET ;
  1954.         XmNtopWidget = XmSeparator light_coeff_sep;
  1955.         XmNleftAttachment = XmATTACH_FORM ;
  1956.             XmNlabelString = "Light Attenuation Coeffients, Const & Dist";
  1957.             };
  1958.         };
  1959.  
  1960. object
  1961.     light_coeff_const : XmTextField {
  1962.         arguments {
  1963.         XmNtopAttachment = XmATTACH_WIDGET ;
  1964.         XmNtopWidget = XmSeparator light_coeff_sep;
  1965.         XmNleftAttachment = XmATTACH_WIDGET;
  1966.         XmNleftWidget = XmLabel light_coeff_label;
  1967.             XmNwidth = 30;
  1968.             XmNmaxLength = 5;
  1969.             XmNvalue = "0";
  1970.             };
  1971.         callbacks {
  1972.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_coeff_const);
  1973.             };
  1974.         };
  1975.  
  1976. object
  1977.     light_coeff_dist : XmTextField {
  1978.         arguments {
  1979.         XmNtopAttachment = XmATTACH_WIDGET ;
  1980.         XmNtopWidget = XmSeparator light_coeff_sep;
  1981.         XmNleftAttachment = XmATTACH_WIDGET;
  1982.         XmNleftWidget = XmTextField light_coeff_const;
  1983.             XmNwidth = 30;
  1984.             XmNmaxLength = 5;
  1985.             XmNvalue = "0";
  1986.             };
  1987.         callbacks {
  1988.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_coeff_dist);
  1989.             };
  1990.         };
  1991.  
  1992. !****************************** light concentration exponent *************
  1993.  
  1994. object
  1995.     light_conc_exp_sep : XmSeparator {
  1996.     arguments {
  1997.         XmNleftAttachment =  XmATTACH_FORM;
  1998.         XmNrightAttachment =  XmATTACH_FORM;
  1999.         XmNtopAttachment = XmATTACH_WIDGET;
  2000.         XmNtopWidget = XmTextField light_direction_z;
  2001.     };
  2002.     };
  2003.  
  2004.  
  2005. object
  2006.     light_conc_exp_label : XmLabel {
  2007.         arguments {
  2008.         XmNtopAttachment = XmATTACH_WIDGET ;
  2009.         XmNtopWidget = XmSeparator light_conc_exp_sep;
  2010.         XmNleftAttachment = XmATTACH_FORM ;
  2011.             XmNlabelString = "Concentration Exponent";
  2012.             };
  2013.         };
  2014.  
  2015. object
  2016.     light_conc_exp : XmTextField {
  2017.         arguments {
  2018.         XmNtopAttachment = XmATTACH_WIDGET ;
  2019.         XmNtopWidget = XmSeparator light_conc_exp_sep;
  2020.         XmNleftAttachment = XmATTACH_WIDGET;
  2021.         XmNleftWidget = XmLabel light_conc_exp_label;
  2022.             XmNwidth = 30;
  2023.             XmNmaxLength = 5;
  2024.             XmNvalue = "0";
  2025.             };
  2026.         callbacks {
  2027.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_conc_exp);
  2028.             };
  2029.         };
  2030.  
  2031.  
  2032. !****************************** light spread angle *************
  2033.  
  2034. object
  2035.     light_spread_angle_sep : XmSeparator {
  2036.     arguments {
  2037.         XmNleftAttachment =  XmATTACH_FORM;
  2038.         XmNrightAttachment =  XmATTACH_FORM;
  2039.         XmNtopAttachment = XmATTACH_WIDGET;
  2040.         XmNtopWidget = XmTextField light_conc_exp;
  2041.     };
  2042.     };
  2043.  
  2044.  
  2045. object
  2046.     light_spread_angle_label : XmLabel {
  2047.         arguments {
  2048.         XmNtopAttachment = XmATTACH_WIDGET ;
  2049.         XmNtopWidget = XmSeparator light_spread_angle_sep;
  2050.         XmNleftAttachment = XmATTACH_FORM ;
  2051.             XmNlabelString = "Spread Angle";
  2052.             };
  2053.         };
  2054.  
  2055. object
  2056.     light_spread_angle : XmTextField {
  2057.         arguments {
  2058.         XmNtopAttachment = XmATTACH_WIDGET ;
  2059.         XmNtopWidget = XmSeparator light_spread_angle_sep;
  2060.         XmNleftAttachment = XmATTACH_WIDGET;
  2061.         XmNleftWidget = XmLabel light_spread_angle_label;
  2062.             XmNwidth = 30;
  2063.             XmNmaxLength = 5;
  2064.             XmNvalue = "0";
  2065.             };
  2066.         callbacks {
  2067.         MrmNcreateCallback = procedure proc_pdraw_create(k_light_spread_angle);
  2068.             };
  2069.         };
  2070.  
  2071.  
  2072. !*****************************  Bottom Buttons ******************************
  2073.  
  2074. object
  2075.     light_button_box : XmRowColumn {
  2076.         arguments {
  2077.             XmNorientation = XmHORIZONTAL;
  2078.         XmNleftAttachment =  XmATTACH_FORM;
  2079.         XmNrightAttachment =  XmATTACH_FORM;
  2080.         XmNbottomAttachment =  XmATTACH_FORM;
  2081.             XmNborderWidth = 2;
  2082.             XmNentryBorder = 3;
  2083.             };
  2084.         controls {                                                  
  2085.             XmPushButton     light_apply_button;
  2086.             XmPushButton     light_dismiss_button;
  2087.             XmPushButton     light_can_button;
  2088.             };
  2089.         };
  2090.  
  2091. object
  2092.     light_apply_button : XmPushButton widget { ! The menu positions the buttons
  2093.         arguments {                     !  automatically.
  2094.             XmNlabelString = "apply";
  2095.             XmNforeground = yellow;
  2096.             XmNbackground = red;
  2097.             XmNhighlightColor = magenta;
  2098.             XmNborderColor = green;
  2099.         XmNaccelerator = "Ctrl <key>a";
  2100.         XmNacceleratorText = " ^a";
  2101.             };
  2102.         callbacks {
  2103.             MrmNcreateCallback = procedure proc_pdraw_create (k_apply_light);
  2104.             XmNactivateCallback = procedure proc_pdraw_activate (k_apply_light);
  2105.         };
  2106.     };
  2107.  
  2108. object
  2109.     light_can_button : XmPushButton widget {                       
  2110.         arguments {
  2111.             XmNlabelString = "reset";
  2112.             XmNforeground = yellow;
  2113.             XmNbackground = red;
  2114.             XmNhighlightColor = magenta;
  2115.             XmNborderColor = green;
  2116.             };
  2117.         callbacks {
  2118.             MrmNcreateCallback = procedure proc_pdraw_create (k_reset_light);
  2119.             XmNactivateCallback = procedure proc_pdraw_activate (k_reset_light);
  2120.         };
  2121.     };
  2122.  
  2123. object
  2124.     light_dismiss_button : XmPushButton widget {
  2125.         arguments {
  2126.             XmNlabelString = "dismiss";
  2127.             XmNforeground = yellow;
  2128.             XmNbackground = red;
  2129.             XmNhighlightColor = magenta;
  2130.             XmNborderColor = green;
  2131.         };
  2132.         callbacks {
  2133.             MrmNcreateCallback = procedure proc_pdraw_create (k_dismiss_light);
  2134.             XmNactivateCallback = procedure proc_pdraw_activate (k_dismiss_light);
  2135.         };
  2136.     };
  2137.  
  2138. !************************************************************************
  2139. ! end of Lights Form
  2140. !************************************************************************
  2141.  
  2142.  
  2143. !************************************************************************
  2144. ! The File Form
  2145. !************************************************************************
  2146.  
  2147. object
  2148.     file_dialog : XmFormDialog {
  2149.         arguments {
  2150.             XmNdialogTitle = "File Selection";
  2151.             XmNdialogStyle = XmDIALOG_MODELESS;
  2152.         XmNheight = 400;
  2153.         XmNwidth = 360;
  2154.             XmNbackground = lightblue;
  2155.         };
  2156.         controls {
  2157.             XmFileSelectionBox file_selector;
  2158.     };
  2159.  
  2160.         callbacks {
  2161.             MrmNcreateCallback = procedure proc_pdraw_create (k_file);
  2162.         };
  2163.       };
  2164.  
  2165. object
  2166.     file_selector : XmFileSelectionBox {
  2167.         arguments {
  2168.              XmNbackground = lightblue;    
  2169.         };
  2170.         callbacks {
  2171.              XmNokCallback = procedure proc_pdraw_file();
  2172.              XmNcancelCallback = procedure proc_pdraw_file();
  2173.              XmNhelpCallback = procedure proc_pdraw_activate(k_file_help);
  2174.             };        
  2175.     };    
  2176.  
  2177.  
  2178. !************************************************************************
  2179. ! The Surface Form
  2180. !************************************************************************
  2181.  
  2182. object
  2183.     surface_dialog : XmFormDialog {
  2184.         arguments {
  2185.             XmNdialogTitle = "PHIGS Surface Options";
  2186.             XmNdialogStyle = XmDIALOG_MODELESS;
  2187.         XmNheight = 500;
  2188.         XmNwidth = 360;
  2189. !        XmNmwmDecorations = 30;
  2190.             XmNbackground = lightblue;
  2191.         };
  2192.         controls {
  2193.         XmSeparator    surface_style_sep;
  2194.             XmLabel     surface_style_label;
  2195.             XmRadioBox     surface_style_box;
  2196.         XmSeparator    surface_shade_sep;
  2197.         XmLabel    surface_shade_label;
  2198.         XmRadioBox    surface_shade_box;
  2199.         XmSeparator    surface_refl_sep;
  2200.         XmLabel    surface_refl_label;
  2201.         XmSeparator    surface_ambient_sep;
  2202.         XmLabel    surface_ambient_label;
  2203.         XmScale    surface_refl_ambient;
  2204.         XmLabel    surface_diffuse_label;
  2205.         XmScale    surface_refl_diffuse;
  2206.         XmLabel    surface_specular_label;
  2207.         XmScale    surface_refl_specular;
  2208.         XmSeparator    surface_specular_sep;
  2209.         XmLabel    surface_specular_dummy;
  2210.         XmLabel    surface_specexp_label;
  2211.         XmScale    surface_refl_specexp;
  2212.         XmLabel    surface_transparency_label;
  2213.         XmScale    surface_refl_transparency;
  2214.             XmRowColumn surface_button_box;
  2215.         XmSeparator    surface_cull_sep;
  2216.         XmLabel    surface_cull_label;
  2217.         XmRadioBox    surface_cull_box;
  2218.             };
  2219.  
  2220.         callbacks {
  2221.             MrmNcreateCallback = procedure proc_pdraw_create (k_surface);
  2222.             };
  2223.     };
  2224.  
  2225. !****************************** Surface Style
  2226. object
  2227.     surface_style_sep : XmSeparator {
  2228.     arguments {
  2229.         XmNleftAttachment =  XmATTACH_FORM;
  2230.         XmNrightAttachment =  XmATTACH_FORM;
  2231.         XmNtopAttachment = XmATTACH_FORM;
  2232.     };
  2233.     };
  2234.  
  2235. object
  2236.     surface_style_label : XmLabel {
  2237.         arguments {
  2238.         XmNtopAttachment = XmATTACH_WIDGET ;
  2239.         XmNtopWidget = XmSeparator surface_style_sep;
  2240.         XmNleftAttachment = XmATTACH_FORM ;
  2241.         XmNrightAttachment = XmATTACH_FORM ;
  2242.             XmNlabelString = "Surface Style";
  2243.             };
  2244.         };
  2245.  
  2246. object
  2247.     surface_style_box : XmRadioBox {
  2248.         arguments {
  2249.         XmNtopAttachment = XmATTACH_WIDGET ;
  2250.         XmNtopWidget = XmLabel surface_style_label;
  2251.         XmNleftAttachment = XmATTACH_FORM ;
  2252.         XmNrightAttachment = XmATTACH_FORM ;
  2253.             XmNorientation = XmHORIZONTAL;
  2254.             XmNborderWidth = 1;
  2255.             };
  2256.         controls {
  2257.             XmToggleButton   surface_edit1;
  2258.             XmToggleButton   surface_edit2;
  2259.             XmToggleButton   surface_edit3;
  2260.             };
  2261.         };
  2262.  
  2263.  
  2264. object
  2265.     surface_edit1 : XmToggleButton {
  2266.         arguments {  XmNlabelString = "Hollow"; 
  2267.             XmNset = on;   ! A radio box requires one toggle to be set.
  2268.       };
  2269.         callbacks {
  2270.             MrmNcreateCallback = procedure proc_pdraw_create (k_sstyle_hollow);
  2271.             };
  2272.  
  2273.         };
  2274. object
  2275.     surface_edit2 : XmToggleButton {
  2276.         arguments {
  2277.             XmNlabelString = "Solid";
  2278.             };
  2279.         callbacks {
  2280.             MrmNcreateCallback = procedure proc_pdraw_create (k_sstyle_solid);
  2281.             };
  2282.         };
  2283. object
  2284.     surface_edit3 : XmToggleButton {
  2285.         arguments {
  2286.             XmNlabelString = "Empty";
  2287.             };
  2288.         callbacks {
  2289.             MrmNcreateCallback = procedure proc_pdraw_create (k_sstyle_empty);
  2290.             };
  2291.         };
  2292.  
  2293. !****************************** surface shade Radio ********************
  2294. object
  2295.     surface_shade_sep : XmSeparator {
  2296.     arguments {
  2297.         XmNleftAttachment =  XmATTACH_FORM;
  2298.         XmNrightAttachment =  XmATTACH_FORM;
  2299.         XmNtopAttachment = XmATTACH_WIDGET;
  2300.         XmNtopWidget = XmRadioBox surface_style_box;
  2301.     };
  2302.     };
  2303.  
  2304. object
  2305.     surface_shade_label : XmLabel {
  2306.         arguments {
  2307.         XmNtopAttachment = XmATTACH_WIDGET ;
  2308.         XmNtopWidget = XmSeparator surface_shade_sep;
  2309.         XmNleftAttachment = XmATTACH_FORM ;
  2310.         XmNrightAttachment = XmATTACH_FORM;
  2311.             XmNlabelString = "Shading / Interpolation Method";
  2312.             };
  2313.         };
  2314.  
  2315. object
  2316.     surface_shade_box : XmRadioBox {
  2317.         arguments {
  2318.         XmNtopAttachment = XmATTACH_WIDGET ;
  2319.         XmNtopWidget = XmLabel surface_shade_label;
  2320.         XmNleftAttachment = XmATTACH_FORM;
  2321.         XmNrightAttachment = XmATTACH_FORM;
  2322.             XmNorientation = XmHORIZONTAL;
  2323.             XmNborderWidth = 1;
  2324.             };
  2325.         controls {
  2326.             XmToggleButton   surface_shade_flat;
  2327.             XmToggleButton   surface_shade_gouraud;
  2328.             XmToggleButton   surface_shade_dot;
  2329.             XmToggleButton   surface_shade_phong;
  2330.             };
  2331.         };
  2332.  
  2333. object
  2334.     surface_shade_flat : XmToggleButton {
  2335.         arguments {
  2336.             XmNlabelString = "Flat";
  2337.             XmNset = on;   ! A radio box requires one toggle to be set.
  2338.             };
  2339.         callbacks {
  2340.             MrmNcreateCallback = procedure proc_pdraw_create(k_sshade_flat);
  2341.             };
  2342.         };
  2343. object
  2344.     surface_shade_gouraud : XmToggleButton {
  2345.         arguments {
  2346.             XmNlabelString = "Gouraud";
  2347.             };
  2348.         callbacks {
  2349.             MrmNcreateCallback = procedure proc_pdraw_create(k_sshade_gouraud);
  2350.             };
  2351.         };
  2352. object
  2353.     surface_shade_dot : XmToggleButton {
  2354.         arguments {
  2355.             XmNlabelString = "Dot";
  2356.             };
  2357.         callbacks {
  2358.             MrmNcreateCallback = procedure proc_pdraw_create(k_sshade_dot);
  2359.             };
  2360.         };
  2361. object
  2362.     surface_shade_phong : XmToggleButton {
  2363.         arguments {
  2364.             XmNlabelString = "Phong";
  2365.             };
  2366.         callbacks {
  2367.             MrmNcreateCallback = procedure proc_pdraw_create (k_sshade_phong);
  2368.             };
  2369.        };
  2370.  
  2371. !*************************************************************** surface refl *
  2372.  
  2373. object
  2374.     surface_refl_sep : XmSeparator {
  2375.     arguments {
  2376.         XmNleftAttachment =  XmATTACH_FORM;
  2377.         XmNrightAttachment =  XmATTACH_FORM;
  2378.         XmNtopAttachment = XmATTACH_WIDGET;
  2379.         XmNtopWidget = XmRadioBox surface_shade_box;
  2380.     };
  2381.     };
  2382.  
  2383.  
  2384. object
  2385.     surface_refl_label : XmLabel {
  2386.         arguments {
  2387.         XmNtopAttachment = XmATTACH_WIDGET ;
  2388.         XmNtopWidget = XmSeparator surface_refl_sep;
  2389.         XmNrightAttachment = XmATTACH_FORM ;
  2390.         XmNleftAttachment = XmATTACH_FORM ;
  2391.             XmNlabelString = "Surface Reflections Attributes";
  2392.             };
  2393.         };
  2394.  
  2395. object
  2396.     surface_ambient_sep : XmSeparator {
  2397.     arguments {
  2398.         XmNleftAttachment =  XmATTACH_FORM;
  2399.         XmNrightAttachment =  XmATTACH_FORM;
  2400.         XmNtopAttachment = XmATTACH_WIDGET;
  2401.         XmNtopWidget = XmLabel surface_refl_label;
  2402.     };
  2403.     };
  2404.  
  2405. object
  2406.     surface_ambient_label : XmLabel {
  2407.         arguments {
  2408.         XmNtopAttachment = XmATTACH_WIDGET ;
  2409.         XmNtopWidget = XmSeparator surface_ambient_sep;
  2410.         XmNleftAttachment = XmATTACH_FORM ;
  2411.             XmNlabelString = "Ambient Reflection";
  2412.             };
  2413.         };
  2414.  
  2415. object
  2416.     surface_refl_ambient : XmScale {
  2417.         arguments {
  2418.         XmNtopAttachment = XmATTACH_WIDGET ;
  2419.         XmNtopWidget = XmLabel surface_ambient_label;
  2420.         XmNleftAttachment = XmATTACH_FORM;
  2421.         XmNrightAttachment =  XmATTACH_FORM;
  2422.             XmNorientation = XmHORIZONTAL;
  2423.         XmNminimum = 000;
  2424.         XmNmaximum = 100;
  2425.             XmNvalue = 30;
  2426.             XmNshowValue = on;
  2427.         XmNdecimalPoints = 2;
  2428.             };
  2429.         callbacks {
  2430.         MrmNcreateCallback = procedure proc_pdraw_create(k_surface_refl_ambient);
  2431.             };
  2432.         };
  2433.  
  2434.  
  2435. object
  2436.     surface_diffuse_label : XmLabel {
  2437.         arguments {
  2438.         XmNtopAttachment = XmATTACH_WIDGET ;
  2439.         XmNtopWidget = XmScale surface_refl_ambient;
  2440.         XmNleftAttachment = XmATTACH_FORM ;
  2441.             XmNlabelString = "Diffuse Reflection";
  2442.             };
  2443.         };
  2444.  
  2445. object
  2446.     surface_refl_diffuse : XmScale {
  2447.         arguments {
  2448.         XmNtopAttachment = XmATTACH_WIDGET ;
  2449.         XmNtopWidget = XmLabel surface_diffuse_label;
  2450.         XmNleftAttachment = XmATTACH_FORM;
  2451.         XmNrightAttachment =  XmATTACH_FORM;
  2452.             XmNorientation = XmHORIZONTAL;
  2453.         XmNminimum = 000;
  2454.         XmNmaximum = 100;
  2455.             XmNvalue = 30;
  2456.             XmNshowValue = on;
  2457.         XmNdecimalPoints = 2;
  2458.             };
  2459.         callbacks {
  2460.         MrmNcreateCallback = procedure proc_pdraw_create(k_surface_refl_diffuse);
  2461.             };
  2462.         };
  2463.  
  2464. object
  2465.     surface_specular_label : XmLabel {
  2466.         arguments {
  2467.         XmNtopAttachment = XmATTACH_WIDGET ;
  2468.         XmNtopWidget = XmScale surface_refl_diffuse;
  2469.         XmNleftAttachment = XmATTACH_FORM ;
  2470.             XmNlabelString = "Specular Reflection";
  2471.             };
  2472.         };
  2473.  
  2474. object
  2475.     surface_refl_specular : XmScale {
  2476.         arguments {
  2477.         XmNtopAttachment = XmATTACH_WIDGET ;
  2478.         XmNtopWidget = XmLabel surface_specular_label;
  2479.         XmNleftAttachment = XmATTACH_FORM;
  2480.         XmNrightAttachment =  XmATTACH_FORM;
  2481.             XmNorientation = XmHORIZONTAL;
  2482.         XmNminimum = 000;
  2483.         XmNmaximum = 100;
  2484.             XmNvalue = 30;
  2485.             XmNshowValue = on;
  2486.         XmNdecimalPoints = 2;
  2487.             };
  2488.         callbacks {
  2489.         MrmNcreateCallback = procedure proc_pdraw_create(k_surface_refl_specular);
  2490.             };
  2491.         };
  2492.  
  2493.  
  2494. object
  2495.     surface_specular_sep : XmSeparator {
  2496.     arguments {
  2497.         XmNleftAttachment =  XmATTACH_FORM;
  2498.         XmNrightAttachment =  XmATTACH_FORM;
  2499.         XmNtopAttachment = XmATTACH_WIDGET;
  2500.         XmNtopWidget = XmScale surface_refl_specular;
  2501.     };
  2502.     };
  2503.  
  2504.  
  2505. object
  2506.     surface_specular_dummy : XmLabel {
  2507.         arguments {
  2508.         XmNtopAttachment = XmATTACH_WIDGET ;
  2509.         XmNtopWidget = XmSeparator surface_specular_sep;
  2510.         XmNleftAttachment = XmATTACH_FORM ;
  2511.             XmNlabelString = "Specular Color is white...come and change it";
  2512.             };
  2513.         };
  2514.  
  2515.  
  2516. object
  2517.     surface_specexp_label : XmLabel {
  2518.         arguments {
  2519.         XmNtopAttachment = XmATTACH_WIDGET ;
  2520.         XmNtopWidget = XmLabel surface_specular_dummy;
  2521.         XmNleftAttachment = XmATTACH_FORM ;
  2522.             XmNlabelString = "Specular Exponent";
  2523.             };
  2524.         };
  2525.  
  2526. object
  2527.     surface_refl_specexp : XmScale {
  2528.         arguments {
  2529.         XmNtopAttachment = XmATTACH_WIDGET ;
  2530.         XmNtopWidget = XmLabel surface_specexp_label;
  2531.         XmNleftAttachment = XmATTACH_FORM;
  2532.         XmNrightAttachment =  XmATTACH_FORM;
  2533.             XmNorientation = XmHORIZONTAL;
  2534.         XmNminimum = 00;
  2535.         XmNmaximum = 2000;
  2536.             XmNvalue = 500;
  2537.             XmNshowValue = on;
  2538.         XmNdecimalPoints = 1;
  2539.             };
  2540.         callbacks {
  2541.         MrmNcreateCallback = procedure proc_pdraw_create(k_surface_refl_specexp);
  2542.             };
  2543.         };
  2544.  
  2545. object
  2546.     surface_transparency_label : XmLabel {
  2547.         arguments {
  2548.         XmNtopAttachment = XmATTACH_WIDGET ;
  2549.         XmNtopWidget = XmScale surface_refl_specexp;
  2550.         XmNleftAttachment = XmATTACH_FORM ;
  2551.             XmNlabelString = "Transparency";
  2552.             };
  2553.         };
  2554.  
  2555. object
  2556.     surface_refl_transparency : XmScale {
  2557.         arguments {
  2558.         XmNtopAttachment = XmATTACH_WIDGET ;
  2559.         XmNtopWidget = XmLabel surface_transparency_label;
  2560.         XmNleftAttachment = XmATTACH_FORM;
  2561.         XmNrightAttachment =  XmATTACH_FORM;
  2562.             XmNorientation = XmHORIZONTAL;
  2563.         XmNminimum = 0;
  2564.         XmNmaximum = 100;
  2565.             XmNvalue = 0;
  2566.             XmNshowValue = on;
  2567.         XmNdecimalPoints = 2;
  2568.             };
  2569.         callbacks {
  2570.         MrmNcreateCallback = procedure proc_pdraw_create(k_surface_refl_transparency);
  2571.             };
  2572.         };
  2573.  
  2574. !****************************** Surface Cull
  2575. object
  2576.     surface_cull_sep : XmSeparator {
  2577.     arguments {
  2578.         XmNleftAttachment =  XmATTACH_FORM;
  2579.         XmNrightAttachment =  XmATTACH_FORM;
  2580.         XmNtopAttachment = XmATTACH_WIDGET ;
  2581.         XmNtopWidget = XmScale surface_refl_transparency;
  2582.     };
  2583.     };
  2584.  
  2585. object
  2586.     surface_cull_label : XmLabel {
  2587.         arguments {
  2588.         XmNtopAttachment = XmATTACH_WIDGET ;
  2589.         XmNtopWidget = XmSeparator surface_cull_sep;
  2590.         XmNleftAttachment = XmATTACH_FORM ;
  2591.         XmNrightAttachment = XmATTACH_FORM ;
  2592.             XmNlabelString = "Surface Cull";
  2593.             };
  2594.         };
  2595.  
  2596. object
  2597.     surface_cull_box : XmRadioBox {
  2598.         arguments {
  2599.         XmNtopAttachment = XmATTACH_WIDGET ;
  2600.         XmNtopWidget = XmLabel surface_cull_label;
  2601.         XmNleftAttachment = XmATTACH_FORM ;
  2602.         XmNrightAttachment = XmATTACH_FORM ;
  2603.             XmNorientation = XmHORIZONTAL;
  2604.             XmNborderWidth = 1;
  2605.             };
  2606.         controls {
  2607.             XmToggleButton   surface_cull_none;
  2608.             XmToggleButton   surface_cull_back;
  2609.             XmToggleButton   surface_cull_front;
  2610.             };
  2611.         };
  2612.  
  2613.  
  2614. object
  2615.     surface_cull_none : XmToggleButton {
  2616.         arguments {  XmNlabelString = "Neither"; 
  2617.             XmNset = on;   ! A radio box requires one toggle to be set.
  2618.       };
  2619.         callbacks {
  2620.             MrmNcreateCallback = procedure proc_pdraw_create (k_cull_none);
  2621.             };
  2622.  
  2623.         };
  2624. object
  2625.     surface_cull_back : XmToggleButton {
  2626.         arguments {
  2627.             XmNlabelString = "Back Faces";
  2628.             };
  2629.         callbacks {
  2630.             MrmNcreateCallback = procedure proc_pdraw_create (k_cull_back);
  2631.             };
  2632.         };
  2633. object
  2634.     surface_cull_front : XmToggleButton {
  2635.         arguments {
  2636.             XmNlabelString = "Front Faces";
  2637.             };
  2638.         callbacks {
  2639.             MrmNcreateCallback = procedure proc_pdraw_create (k_cull_front);
  2640.             };
  2641.         };
  2642.  
  2643.  
  2644. !*****************************  Bottom Buttons ******************************
  2645.  
  2646. object
  2647.     surface_button_box : XmRowColumn {
  2648.         arguments {
  2649.             XmNorientation = XmHORIZONTAL;
  2650.         XmNleftAttachment =  XmATTACH_FORM;
  2651.         XmNrightAttachment =  XmATTACH_FORM;
  2652.         XmNbottomAttachment =  XmATTACH_FORM;
  2653.             XmNborderWidth = 2;
  2654.             XmNentryBorder = 3;
  2655.             };
  2656.         controls {                                                  
  2657.             XmPushButton     surface_apply_button;
  2658.             XmPushButton     surface_dismiss_button;
  2659.             XmPushButton     surface_can_button;
  2660.             };
  2661.         };
  2662.  
  2663. object
  2664.     surface_apply_button : XmPushButton widget { ! The menu positions the buttons
  2665.         arguments {                     !  automatically.
  2666.             XmNlabelString = "apply";
  2667.             XmNforeground = yellow;
  2668.             XmNbackground = red;
  2669.             XmNhighlightColor = magenta;
  2670.             XmNborderColor = green;
  2671.         XmNaccelerator = "Ctrl <key>a";
  2672.         XmNacceleratorText = " ^a";
  2673.             };
  2674.         callbacks {
  2675.             MrmNcreateCallback = procedure proc_pdraw_create (k_apply_surface);
  2676.             XmNactivateCallback = procedure proc_pdraw_activate (k_apply_surface);
  2677.         };
  2678.     };
  2679.  
  2680. object
  2681.     surface_can_button : XmPushButton widget {                       
  2682.         arguments {
  2683.             XmNlabelString = "fetch";
  2684.             XmNforeground = yellow;
  2685.             XmNbackground = red;
  2686.             XmNhighlightColor = magenta;
  2687.             XmNborderColor = green;
  2688.             };
  2689.         callbacks {
  2690.             XmNactivateCallback = procedure proc_pdraw_activate (k_reset_surface);
  2691.         };
  2692.     };
  2693.  
  2694. object
  2695.     surface_dismiss_button : XmPushButton widget {
  2696.         arguments {
  2697.             XmNlabelString = "dismiss";
  2698.             XmNforeground = yellow;
  2699.             XmNbackground = red;
  2700.             XmNhighlightColor = magenta;
  2701.             XmNborderColor = green;
  2702.         };
  2703.         callbacks {
  2704.             MrmNcreateCallback = procedure proc_pdraw_create (k_dismiss_surface);
  2705.             XmNactivateCallback = procedure proc_pdraw_activate (k_dismiss_surface);
  2706.         };
  2707.     };
  2708.  
  2709. !************************************************************************
  2710. ! end of Surface Form
  2711. !************************************************************************
  2712.  
  2713. end module;
  2714.  
  2715.